package ar.uba.is2.common.mensaje.test2;

import static ar.uba.is2.common.mensaje.MensajeTestContext.componente1;
import static ar.uba.is2.common.mensaje.MensajeTestContext.componente2;
import static ar.uba.is2.common.mensaje.MensajeTestContext.crearMensaje;
import static ar.uba.is2.common.mensaje.MensajeTestContext.imprimirMensaje;

import java.io.File;
import java.io.IOException;

import ar.uba.is2.common.mensaje.Mensaje;
import ar.uba.is2.common.mensaje.exception.EnviandoMensajeException;
import ar.uba.is2.common.mensaje.exception.LeyendoMensajeException;
import ar.uba.is2.common.mensaje.puerto.PuertoEntrada;
import ar.uba.is2.common.mensaje.puerto.PuertoSalida;
import ar.uba.is2.common.mensaje.puerto.impl.PuertoArchivo;

public class SincronizarComponentesTest1 {

	public static final String pathComponente1 = "../comp1.txt";

	private PuertoSalida out;
	private PuertoEntrada in;

	public static void main(String[] args) {
		try {
			SincronizarComponentesTest1 sincComp = new SincronizarComponentesTest1(pathComponente1, SincronizarComponentesTest2.pathComponente2);
			
			sincComp.correr();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public SincronizarComponentesTest1(String pathEntrada, String pathSalida) throws IOException{
		File entrada = new File(pathEntrada);
		File salida = new File(pathSalida);
		
		PuertoArchivo puerto = new PuertoArchivo(entrada, salida);
		
		this.out = puerto;
		this.in = puerto;
	}

	public void correr() {

		try {
			Mensaje mensaje = crearMensaje(componente1, componente2,
					"hola como estas?");

			out.enviarMensaje(mensaje);
			imprimirMensaje(componente1, mensaje);

			Mensaje respuesta = in.leerMensaje();
			imprimirMensaje(componente2, respuesta);

			mensaje = crearMensaje(componente1, componente2,
					"bien bien. que queres?");

			out.enviarMensaje(mensaje);
			imprimirMensaje(componente1, mensaje);

			respuesta = in.leerMensaje();
			imprimirMensaje(componente2, respuesta);
			
			mensaje = crearMensaje(componente1, componente2,
					"entonces no jodas. chau");

			out.enviarMensaje(mensaje);
			imprimirMensaje(componente1, mensaje);

		} catch (EnviandoMensajeException e) {
			e.printStackTrace();
		} catch (LeyendoMensajeException e) {
			e.printStackTrace();
		}
	}
}